/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2022-10-02
 * Time:23:27
 */

/**
 * 力扣777:再LR字符串中交换相邻字符串
 */

/**
 * n表示start和end的长度,用i和j分别表示start和end的中的下标,从左向右遍历start和end,跳过所有的"X",
 * 当i和j都小于n时,比较非"X"的字符
 */
public class canTransform {

    public static void main(String[] args) {
        String start = "RXXLRXRXL", end = "XRLXXRRLX";
        System.out.println(canTransform(start, end));
    }

    public static boolean canTransform(String start, String end) {
        int n = start.length();
        int i = 0, j = 0;
        while (i < n && j < n) {
            while (i < n && start.charAt(i) == 'X') {
                i++;
            }
            while (j < n && end.charAt(j) == 'X') {
                j++;
            }
            if (i < n && j < n) {
                //如果start[i]!=end[j],则start和end中的当前字符不匹配,返回false
                if (start.charAt(i) != end.charAt(j)) {
                    return false;
                }
                char c = start.charAt(i);
                //如果相等,则当前的字符是"L"时应有i>=j,当前字符是"R"时应有i<=j,如果当前字符与两个下标的关系不符合规则
                if ((c == 'L' && i < j) || (c == 'R' && i > j)) {
                    return false;
                }
                i++;
                j++;
            }
        }
        /**
         * 如果 iii 和 jjj 中有一个下标大于等于 nnn，则有一个字符串已经遍历到末尾，
         * 继续遍历另一个字符串中的其余字符，如果其余字符中出现非 ‘X’\text{`X'}‘X’ 的字符，
         * 则该字符不能与任意字符匹配，返回 false\text{false}false。
         */
        while (i < n) {
            if (start.charAt(i) != 'X') {
                return false;
            }
            i++;
        }
        while (j < n) {
            if (end.charAt(j) != 'X') {
                return false;
            }
            j++;
        }
        return true;
    }
}
